package com.guan.mysolutionstudy;

import org.junit.Test;

/**
 * @ClassName BracketMatchingDepth
 * @Author GuanCary
 * @Date 2020/5/13 17:39
 * @Version 1.0
 * Bracket matching depth
 * > 爱奇艺 2018 秋招 Java：
 * > 一个合法的括号匹配序列有以下定义:
 * >
 * > 1. 空串""是一个合法的括号匹配序列
 * > 2. 如果"X"和"Y"都是合法的括号匹配序列,"XY"也是一个合法的括号匹配序列
 * > 3. 如果"X"是一个合法的括号匹配序列,那么"(X)"也是一个合法的括号匹配序列
 * > 4. 每个合法的括号序列都可以由以上规则生成。
 * <p>
 * > 例如: "","()","()()","((()))"都是合法的括号序列
 * > 对于一个合法的括号序列我们又有以下定义它的深度:
 * >
 * > 1. 空串""的深度是0
 * > 2. 如果字符串"X"的深度是x,字符串"Y"的深度是y,那么字符串"XY"的深度为max(x,y)
 * > 3. 如果"X"的深度是x,那么字符串"(X)"的深度是x+1
 * <p>
 * > 例如: "()()()"的深度是1,"((()))"的深度是3。牛牛现在给你一个合法的括号序列,需要你计算出其深度。
 * 思路很简单,我们可以遍历这个字符串,遇到左括号count+1,遇到右括号count-1,也就是只有出现连续的(字符才会得到其深度
 **/
public class BracketMatchingDepth {
    public static int solution(String string) {
        int count = 0;
        int max = 0;
        for (int i = 0; i < string.length(); i++) {
            if (string.charAt(i) == '(') {
                count++;
                //将count 的值保存在max中
                max = count;
            } else {
                //因为只包括正反括号,所以就可以直接减一
                count--;
            }
        }
        System.out.println(max);
        return max;
    }

    @Test
    public void test() {
        //这里的是合法的括号序列,不可能出现类似(((())()))的情况,这里的括号最外边和最外边配对,最后出现了())(的集合,所以不合法
        solution("((()))");
        solution("(()())");
    }
}